package cn.com.dcsgo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * SpringMvc配置类
 * 实现 WebMvcConfigurer 接口 简化WebMVC的配置
 *
 * @author Dcsgo
 * @since 2025/3/2 15:34
 */
@EnableWebMvc
@Configuration
@ComponentScan({"cn.com.dcsgo.controller"})
public class MvcConfig implements WebMvcConfigurer {

    /**
     * 配置视图解析器
     * 自动将视图解析为jsp视图并添加前后缀
     *
     * @param registry registry
     */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        //controller在进行视图返回时会添加这里的前后缀(前后的/不能少)
        registry.jsp("/WEB-INF/views/", ".jsp");
    }

    /**
     * 静态资源访问处理
     * 通常情况下静态资源的访问只需要保证url的资源访问路径
     * 与webapp下的路径相同即可
     * 但现在在配置类中我们已经配置 handlerMapping 为 /
     * 也就是当前项目下的所有请求都会走 handlerMapping
     * 这时只要我们Controller中的handler没有例如：
     * images/wang.jpg 这样的handler就会报404
     * 解决方案呢就是进行如下配置，即启用 默认的 Servlet 的转发
     * 这样当没有匹配的handler时，SpringMVC就会走默认的 Servlet 的转发，也就能访问到我们的静态资源了
     *
     * @param configurer configurer
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}
